/* 
 * File:   Proceso_DepuracionSesionesInactivas.h
 * Author: gabilan
 *
 * Created on 21 de junio de 2013, 19:03
 */

#ifndef PROCESO_DEPURACIONSESIONESINACTIVAS_H
#define	PROCESO_DEPURACIONSESIONESINACTIVAS_H
#include "server_Proceso.h"
#include "server_IAdministradorSesiones.h"

using namespace TP;
using namespace TP::Procesos;

namespace TP { namespace Procesos {
/**
 * @class ProcesoDepuracionSesionesInactivas
 * Clase que implementa el proceso en un thread de recorrer la lista de sesiones
 * para chequear que estén dentro del tiempo establecido de timeout, y si no
 * cumplen con dicho tiempo, proceder a finalizar la sesión
 */
class ProcesoDepuracionSesionesInactivas: public Proceso{
public:
    /**
     * @brief Constructor del proceso
     * @param pId Numero de proceso
     * @param pAdministradorSesiones puntero al administrador para poder obtener
     * las sesiones iniciadas y verificar el tiempo
     * @param timeout Tiempo de timeout para las sesiones
     */
    ProcesoDepuracionSesionesInactivas(const uint32_t &pId, 
                                IAdministradorSesiones* pAdministradorSesiones, 
                                const unsigned int timeout);
    
    virtual void Iniciar() throw (Excepcion&);

    virtual void Finalizar() throw (Excepcion&);
    
    virtual ~ProcesoDepuracionSesionesInactivas();
    
protected:
    virtual void tarea();
    
private:
    ProcesoDepuracionSesionesInactivas(const ProcesoDepuracionSesionesInactivas&);
    ProcesoDepuracionSesionesInactivas& operator = (const ProcesoDepuracionSesionesInactivas&);
    
    IAdministradorSesiones* _administradorSesiones;
    unsigned int _timeout;
};
}}

#endif	/* PROCESO_DEPURACIONSESIONESINACTIVAS_H */

